﻿Imports Commander_Wars.Spieletools
''' <summary>
''' Eine sehr leichte KI. Fertig
''' </summary>
''' <remarks></remarks>
Public Class KIKinderleicht
    Inherits ObjektKI
    ''' <summary>
    ''' Einheit die teurer sind werden nur gebaut wenn wir mehr als 25000 Fonds haben.
    ''' </summary>
    ''' <remarks></remarks>
    Const GeldKosten As Integer = 11999
    Public Sub New(ByVal neuSpieler As ObjektSpieler)
        MyBase.New(neuSpieler, -10, 0.5#, 0.5#, Besetzungsprioritäten.Keine, GeldTPAngriffsModus.NurGeld, 0, 0, 0, -1)
        StartNeuerKIThreat()
    End Sub
    ''' <summary>
    ''' Führt die Zug bewegungen der Kinderleichten KI aus. Muahaha und dann Boom.Diese KI kann keine Gebäude bedinnen
    ''' </summary>
    ''' <remarks></remarks>
    Public Overrides Sub KISchleife()
        Objektverwalter.Spielfeld.EingabenErlauben = False
        KIWarten(12)
        While Schleife = False
            MomentaneEinheit = 0
            Select Case KIModusIntern
                Case KIModiIntern.KIStart
                    KinderleichtGabenEinsetzen()
                Case KIModiIntern.StartWarten
                    GetAllUnits(EinheitenSortierKriterien.Zufall)
                    KIModusIntern = KIModiIntern.ExternGesteuerteEinheiten
                Case KIModiIntern.ExternGesteuerteEinheiten
                    ExternGesteurteEinheiten()
                Case KIModiIntern.GebäudeAngriff
                    KIModusIntern = KIModiIntern.ExternGesteuerteEinheiten
                Case KIModiIntern.Besetzen
                    KinderleichtBesetzen()
                Case KIModiIntern.HölliumZiehen
                    KIModusIntern = KIModiIntern.Fernkampf
                Case KIModiIntern.Fernkampf
                    KinderleichtFernkampfAngriff()
                Case KIModiIntern.Nahkampf
                    KinderleichtNahkampfAngriff()
                Case KIModiIntern.Nahkampfziehen
                    KinderleichtNahkampfZiehen()
                Case KIModiIntern.Infanterieziehen
                    KinderleichtInfanterieZiehen()
                Case KIModiIntern.Fernkampfziehen
                    KinderleichtFernkampfziehen()
                Case KIModiIntern.TransporterVerladen
                    EinheitenVerladen()
                    KIModusIntern = KIModiIntern.Transproterziehen
                Case KIModiIntern.Transproterziehen
                    TransporterZiehen(EinheitenSortierKriterien.Zufall)
                    KIModusIntern = KIModiIntern.Bauen
                Case KIModiIntern.Bauen
                    GetAllBuildings()
                    KinderleichtBauen()
                Case KIModiIntern.RundenEnde
                    KinderleichtRundenEnde()
            End Select
        End While
    End Sub


    ''' <summary>
    ''' So werden zu beginn Gaben einer einfachen KI eingesetzt.
    ''' Es wird nicht überprüft ob der Einsatz der Gabe bzw. Spezialgabe sinnvoll ist.
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub KinderleichtGabenEinsetzen()
        If Spieler.VeränderteWerte.Gabeeinsatz = True Then
            Dim GabefüllstandKO1 As Integer = Spieler.KOS(0).Gabeleiste
            Dim GabefüllstandKO2 As Integer = -1
            If IsNothing(Spieler.KOS(1)) = False Then
                GabefüllstandKO2 = Spieler.KOS(1).Gabeleiste
            End If
            If GabefüllstandKO1 > Spieler.KOS(0).Gabekosten * Spieler.KOS(0).Sternkosten + Spieler.KOS(0).Sternkosten / 2 Then
                If GabefüllstandKO1 >= (Spieler.KOS(0).Gabekosten + Spieler.KOS(0).SpezialgabeKosten) * Spieler.KOS(0).Sternkosten Then
                    If IsNothing(Spieler.KOS(1)) = False Then
                        If GabefüllstandKO2 >= (Spieler.KOS(1).SpezialgabeKosten + Spieler.KOS(1).Gabekosten) * Spieler.KOS(1).Sternkosten Then
                            'Die Doppelgabe kommt euer untergang ist nah Muahaha
                            Spieler.KOS(0).Doppelgabe()
                        ElseIf GabefüllstandKO2 <= (Spieler.KOS(1).SpezialgabeKosten + Spieler.KOS(1).Gabekosten) * Spieler.KOS(1).Sternkosten - Spieler.KOS(1).Sternkosten * 3 Then
                            'Die KI setzt die Spezialgabe ein
                            If Spieler.KOS(0).KannSpezialGabe Then
                                Spieler.KOS(0).Spezialgabe()
                            End If
                        End If
                    Else
                        'Die KI setzt die Spezialgabe ein
                        If Spieler.KOS(0).KannSpezialGabe Then
                            Spieler.KOS(0).Spezialgabe()
                        End If
                    End If
                End If
            ElseIf GabefüllstandKO1 > Spieler.KOS(0).Gabekosten * Spieler.KOS(0).Sternkosten Then
                'Die KI setzt die Gabe ein
                If Spieler.KOS(0).KannGabe Then
                    Spieler.KOS(0).Gabe()
                End If
            End If
        End If
        KIModusIntern = KIModiIntern.StartWarten
        KIWarten(8)
    End Sub
    ''' <summary>
    ''' Mit dieser Funktion Suchen sich die Einfachen KI's die Gebäude aus die sie besetzen
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub KinderleichtBesetzen()
        KOEinheitErschaffen()
        While MomentaneEinheit < Einheiten.Length
            If ExistUnit(Einheiten(MomentaneEinheit)) = True Then
                Dim Einheit As Integer = MomentaneEinheit
                If Einheiten(Einheit).KannBesetzen = True Then
                    If Einheiten(Einheit).IsUsingUnit(MinimalerTreibstoff, MinimaleMunition, MinimaleKP) = True Then
                        Dim WSS As Wegsuchsystem = CreateWSS(Einheiten(Einheit))
                        If Einheiten(Einheit).Besetzen = True Then
                            'Diese Einheit besetzt gerade ein Gebäude da macht sie damit gleich weiter
                            Einheitauswählen(Einheiten(Einheit), New Point(Einheiten(Einheit).X, Einheiten(Einheit).Y), KIModiExtern.Besetzen, Nothing, WSS, 4)
                        ElseIf Einheiten(Einheit).KannBesetzen = True Then
                            Dim G As ObjektGebäude = Objektverwalter.Spielfeld.Landschaften(Einheiten(Einheit).X, Einheiten(Einheit).Y, Schlachtfeld).Gebäude
                            If G Is Nothing Then
                                Dim Ziel As Point = GetWeitestesBesetzungsFeld(Einheiten(Einheit), WSS)
                                If Ziel.X >= 0 Then
                                    'Diese KI sucht noch nicht nach dem Besten Gebäude sondern besetzt das erst beste
                                    WSS.Ziel(Ziel.X, Ziel.Y, True)
                                    Dim Bes As ObjektGebäude = Objektverwalter.Spielfeld.Landschaften(Ziel.X, Ziel.Y, Schlachtfeld).Gebäude
                                    If Bes.Angriff = ObjektGebäude.Angriffe.Silo Then
                                        Dim Ziel2 As Point = GetBestenEinschlagsOrt(Bes.Reichweite, Bes.Schaden)
                                        Einheitauswählen(Einheiten(Einheit), Ziel, KIModiExtern.SiloZünden, New EinheitAmphibienpanzer(0, Ziel2.X, Ziel2.Y), WSS, 4)
                                    Else
                                        Einheitauswählen(Einheiten(Einheit), Ziel, KIModiExtern.Besetzen, Nothing, WSS, 4)
                                    End If
                                End If
                            ElseIf G.IsBesetzung(Spieler.Spieler) = True Then
                                Dim Ziel As New Point(Einheiten(Einheit).X, Einheiten(Einheit).Y)
                                If G.Angriff = ObjektGebäude.Angriffe.Silo Then
                                    Dim Ziel2 As Point = GetBestenEinschlagsOrt(G.Reichweite, G.Schaden)
                                    Einheitauswählen(Einheiten(Einheit), Ziel, KIModiExtern.SiloZünden, New EinheitAmphibienpanzer(0, Ziel2.X, Ziel2.Y), WSS, 4)
                                Else
                                    Einheitauswählen(Einheiten(Einheit), Ziel, KIModiExtern.Besetzen, Nothing, WSS, 4)
                                End If
                            Else
                                Dim Ziel As Point = GetWeitestesBesetzungsFeld(Einheiten(Einheit), WSS)
                                If Ziel.X >= 0 Then
                                    'Diese KI sucht noch nicht nach dem Besten Gebäude sondern besetzt das erst beste
                                    WSS.Ziel(Ziel.X, Ziel.Y, True)
                                    Dim Bes As ObjektGebäude = Objektverwalter.Spielfeld.Landschaften(Ziel.X, Ziel.Y, Schlachtfeld).Gebäude
                                    If Bes.Angriff = ObjektGebäude.Angriffe.Silo Then
                                        Dim Ziel2 As Point = GetBestenEinschlagsOrt(Bes.Reichweite, Bes.Schaden)
                                        Einheitauswählen(Einheiten(Einheit), Ziel, KIModiExtern.SiloZünden, New EinheitAmphibienpanzer(0, Ziel2.X, Ziel2.Y), WSS, 4)
                                    Else
                                        Einheitauswählen(Einheiten(Einheit), Ziel, KIModiExtern.Besetzen, Nothing, WSS, 4)
                                    End If
                                End If
                            End If
                        End If
                    End If
                End If
            End If
            MomentaneEinheit += 1
        End While
        KIModusIntern = KIModiIntern.Fernkampf
    End Sub
    ''' <summary>
    ''' Führt die Fernkämpfe der einfachen KI aus.
    ''' Diese KI haut mit ihren Fernwaffen in keinem Fall ab.
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub KinderleichtFernkampfAngriff()
        Dim M As ObjektSpielMenü = Objektverwalter.Menü
        While MomentaneEinheit < Einheiten.Length
            If ExistUnit(Einheiten(MomentaneEinheit)) = True Then
                Dim E As ObjektEinheit = Einheiten(MomentaneEinheit)
                If E.HatsichBewegt = False Then
                    If E.MaximaleReichweite > 1 Then
                        Dim WSS As Wegsuchsystem = CreateWSS(E)
                        'OH je  das wird noch komplikate
                        If E.CanIndirectMoveAndFire And Spieler.KOS(0).FireandMove = True Then
                            Dim Feld As Point = GetBestesFernkampfOpfer(E)
                            If Feld.X >= 0 Then
                                Einheitauswählen(E, New Point(E.X, E.Y), KIModiExtern.Angriff, Objektverwalter.Spielfeld.Einheiten(Feld.X, Feld.Y, Schlachtfeld), WSS)
                                Dim Felder As Point2 = GetBestesFernkampfFeldmitBewegung(E, WSS)
                                If Felder.Point1.X >= 0 And Felder.Point2.X >= 0 Then
                                    'So wir haben ein Opfer.
                                    NächsterBefehl(Felder.Point1, Objektverwalter.Spielfeld.Einheiten(Felder.Point2.X, Felder.Point2.Y, Schlachtfeld), KIModiExtern.Angriff, WSS, 4)
                                End If
                            Else
                                Dim Felder As Point2 = GetBestesFernkampfFeldmitBewegung(E, WSS)
                                If Felder.Point1.X >= 0 And Felder.Point2.X >= 0 Then
                                    'So wir haben ein Opfer.
                                    Einheitauswählen(E, Felder.Point1, KIModiExtern.Angriff, Objektverwalter.Spielfeld.Einheiten(Felder.Point2.X, Felder.Point2.Y, Schlachtfeld), WSS)
                                End If
                            End If
                            EinheitAbwählen()
                        ElseIf E.CanIndirectMoveAndFire Then
                            'Ein Angriff ziehen und Feuern wie beim Nahkampf
                            Dim Felder As Point2 = GetBestesFernkampfFeldmitBewegung(E, WSS)
                            If Felder.Point1.X >= 0 And Felder.Point2.X >= 0 Then
                                'So wir haben ein Opfer.
                                Einheitauswählen(E, Felder.Point1, KIModiExtern.Angriff, Objektverwalter.Spielfeld.Einheiten(Felder.Point2.X, Felder.Point2.Y, Schlachtfeld), WSS)
                            End If
                        ElseIf Spieler.KOS(0).FireandMove = True Then
                            'Wir suchen uns ein Opfer
                            Dim Feld As Point = GetBestesFernkampfOpfer(E)
                            If Feld.X >= 0 Then
                                Einheitauswählen(E, New Point(E.X, E.Y), KIModiExtern.Angriff, Objektverwalter.Spielfeld.Einheiten(Feld.X, Feld.Y, Schlachtfeld), WSS)
                            End If
                            'wir haben unser Opfer angegriffen jetzt sollten wir die Einheit noch ziehen.
                            WSS = New Wegsuchsystem(E, E.X, E.Y, Einheiten(MomentaneEinheit).GetMap, -1)
                            Dim Ziel As Point = GetNähestesFernkampffeld(E, WSS)
                            If Ziel.X >= 0 Then
                                If Objektverwalter.Spielfeld.AktuelleEinheit Is Nothing Then
                                    Einheitauswählen(E, New Point(E.X, E.Y), KIModiExtern.Warten, Nothing, WSS)
                                Else
                                    NächsterBefehl(Ziel, Nothing, KIModiExtern.Warten, WSS, 4)
                                End If
                            Else
                                EinheitAbwählen()
                            End If
                        Else
                            'Das ist mir die liebste und einfachst Situation Uff.
                            Dim Feld As Point = GetBestesFernkampfOpfer(E)
                            If Feld.X >= 0 Then
                                Einheitauswählen(E, New Point(E.X, E.Y), KIModiExtern.Angriff, Objektverwalter.Spielfeld.Einheiten(Feld.X, Feld.Y, Schlachtfeld), WSS, 4)
                            End If
                        End If
                    End If
                End If
            End If
            MomentaneEinheit += 1
        End While
        KIModusIntern = KIModiIntern.Nahkampf
    End Sub
    ''' <summary>
    ''' So ziehen einfache KI's in den Nahkampf
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub KinderleichtNahkampfAngriff()
        While MomentaneEinheit < Einheiten.Length
            If ExistUnit(Einheiten(MomentaneEinheit)) = True Then
                If Einheiten(MomentaneEinheit).HatsichBewegt = False Then
                    If Einheiten(MomentaneEinheit).KannBesetzen = False Then
                        If Einheiten(MomentaneEinheit).MinimaleReichweite = 1 Or Not Einheiten(MomentaneEinheit).Waffe1 = "Keine" Then
                            Dim WSS As Wegsuchsystem = CreateWSS(Einheiten(MomentaneEinheit))
                            Dim Feld As Point2 = GetBestesNahkampfOpfer(Einheiten(MomentaneEinheit), WSS)
                            If Feld.Point1.X >= 0 And Feld.Point2.X >= 0 Then
                                Einheitauswählen(Einheiten(MomentaneEinheit), Feld.Point1, KIModiExtern.Angriff, Objektverwalter.Spielfeld.Einheiten(Feld.Point2.X, Feld.Point2.Y, Schlachtfeld), WSS, 4)
                            End If
                        End If
                    End If
                End If
            End If
            MomentaneEinheit += 1
        End While
        KIModusIntern = KIModiIntern.Nahkampfziehen
    End Sub
    ''' <summary>
    ''' So werden die Einheiten  von einfachen KI's zum Ziel geführt
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub KinderleichtNahkampfZiehen()
        While MomentaneEinheit < Einheiten.Length
            If ExistUnit(Einheiten(MomentaneEinheit)) = True Then
                If Einheiten(MomentaneEinheit).IsUsingUnit(MinimalerTreibstoff, MinimaleMunition, MinimaleKP) = True Then
                    If Einheiten(MomentaneEinheit).MinimaleReichweite = 1 Or Not Einheiten(MomentaneEinheit).Waffe1 = "Keine" Then
                        If Einheiten(MomentaneEinheit).KannBesetzen = False Then
                            'So das ist vieleicht eine Nahkampfeinheit und zwar kein Infaterist
                            'und diese Einheit kann nicht Angreifen oder doch nah ja das ist ja eine doofe KI
                            'Also keine Abfrage!
                            Dim WSS As New Wegsuchsystem(Einheiten(MomentaneEinheit), Einheiten(MomentaneEinheit).X, Einheiten(MomentaneEinheit).Y, Einheiten(MomentaneEinheit).GetMap, -1)
                            Dim Ziel As Point = GetNähestenNahkampfFeind(Einheiten(MomentaneEinheit), WSS)
                            If Ziel.X >= 0 Then
                                Einheitauswählen(Einheiten(MomentaneEinheit), Ziel, KIModiExtern.Warten, Nothing, WSS, 4)
                            Else
                                Ziel = ZumNähestenHQZiehen(Einheiten(MomentaneEinheit), WSS)
                                If Ziel.X > 0 Then
                                    Einheitauswählen(Einheiten(MomentaneEinheit), Ziel, KIModiExtern.Warten, Nothing, WSS, 4)
                                End If
                            End If
                        End If
                    End If
                End If
            End If
            MomentaneEinheit += 1
        End While
        KIModusIntern = KIModiIntern.Infanterieziehen
    End Sub
    ''' <summary>
    ''' So ziehen die Infanteristen
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub KinderleichtInfanterieZiehen()
        While MomentaneEinheit < Einheiten.Length
            If ExistUnit(Einheiten(MomentaneEinheit)) = True Then
                If Einheiten(MomentaneEinheit).IsUsingUnit(MinimalerTreibstoff, MinimaleMunition, MinimaleKP) = True Then
                    If Einheiten(MomentaneEinheit).KannBesetzen Then
                        If Not Einheiten(MomentaneEinheit).Waffe1 = "Keine" Or Einheiten(MomentaneEinheit).MinimaleReichweite = 1 Then
                            Dim WSS As Wegsuchsystem = Nothing
                            Dim Ziel As Point2 = GetBestesNahkampfOpfer(Einheiten(MomentaneEinheit), WSS)
                            If Ziel.Point1.X >= 0 And Ziel.Point2.X >= 0 Then
                                Einheitauswählen(Einheiten(MomentaneEinheit), Ziel.Point1, KIModiExtern.Angriff, Objektverwalter.Spielfeld.Einheiten(Ziel.Point2.X, Ziel.Point2.Y, Schlachtfeld), WSS, 4)
                            Else
                                'wir schauen ob wir zu einer Besetzung gehen
                                WSS = CreateWSS(Einheiten(MomentaneEinheit), -1)
                                Dim Zielpunkt As Point = GetNähesteBesetzung(Einheiten(MomentaneEinheit), WSS)
                                If Zielpunkt.X >= 0 Then
                                    Einheitauswählen(Einheiten(MomentaneEinheit), Zielpunkt, KIModiExtern.Warten, Nothing, WSS)
                                Else
                                    'Wir gehen zu einem Feind.
                                    Zielpunkt = GetNähestenNahkampfFeind(Einheiten(MomentaneEinheit), WSS)
                                    If Zielpunkt.X >= 0 Then
                                        Einheitauswählen(Einheiten(MomentaneEinheit), Zielpunkt, KIModiExtern.Warten, Nothing, WSS)
                                    Else
                                        Zielpunkt = ZumNähestenHQZiehen(Einheiten(MomentaneEinheit), WSS)
                                        If Zielpunkt.X > 0 Then
                                            Einheitauswählen(Einheiten(MomentaneEinheit), Zielpunkt, KIModiExtern.Warten, Nothing, WSS, 4)
                                        End If
                                    End If
                                End If
                            End If
                        End If
                    End If
                End If
            End If
            MomentaneEinheit += 1
        End While
        KIModusIntern = KIModiIntern.Fernkampfziehen
    End Sub
    ''' <summary>
    ''' So werden die Fernkampf Einheiten der Kinderleichten KI gezogen
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub KinderleichtFernkampfziehen()
        While MomentaneEinheit < Einheiten.Length
            If Einheiten(MomentaneEinheit).IsUsingUnit(MinimalerTreibstoff, MinimaleMunition, MinimaleKP) = True Then
                If Einheiten(MomentaneEinheit).MaximaleReichweite > 1 Then
                    Dim WSS As New Wegsuchsystem(Einheiten(MomentaneEinheit), Einheiten(MomentaneEinheit).X, Einheiten(MomentaneEinheit).Y, Einheiten(MomentaneEinheit).GetMap, -1)
                    Dim Ziel As Point = GetNähestesFernkampffeld(Einheiten(MomentaneEinheit), WSS)
                    If Ziel.X >= 0 Then
                        Einheitauswählen(Einheiten(MomentaneEinheit), Ziel, KIModiExtern.Warten, Nothing, WSS, 4)
                    Else
                        Ziel = ZumNähestenHQZiehen(Einheiten(MomentaneEinheit), WSS)
                        If Ziel.X > 0 Then
                            Einheitauswählen(Einheiten(MomentaneEinheit), Ziel, KIModiExtern.Warten, Nothing, WSS, 4)
                        End If
                    End If
                End If
            End If
            MomentaneEinheit += 1
        End While
        MomentaneEinheit = 0
        'Damit Einheiten nicht auf Profuktionsgebäuden stehen.
        TruppenWegZiehen()
        KIModusIntern = KIModiIntern.TransporterVerladen
    End Sub
    Private Sub TruppenWegZiehen()
        While MomentaneEinheit < Einheiten.Length
            Dim Einheit As ObjektEinheit = Einheiten(MomentaneEinheit)
            If Einheiten(MomentaneEinheit).IsUsingUnit(MinimalerTreibstoff, MinimaleMunition, MinimaleKP) = True Then
                Dim Gebäude As ObjektGebäude = Objektverwalter.Spielfeld.Landschaften(Einheit.X, Einheit.Y, Schlachtfeld).Gebäude
                If Not Gebäude Is Nothing Then
                    If Gebäude.GetBauliste(Gebäude.Spieler).Length > 0 And Spieler.Team = Objektverwalter.Spielfeld.Spieler(Gebäude.Spieler).Team Then
                        Dim WSS As New Wegsuchsystem(Einheit, Einheit.X, Einheit.Y, Einheit.GetMap, -1)
                        Dim Ziele As Point() = GetFreeFelder(Einheit, WSS)
                        If Ziele.Length > 0 Then
                            Einheitauswählen(Einheit, Ziele(Zufallszahl(0, Ziele.Length - 1)), KIModiExtern.Warten, Nothing, WSS, 4)
                        End If
                    End If
                End If
            End If
            MomentaneEinheit += 1
        End While
    End Sub
    ''' <summary>
    ''' So Baut die Kinderleichte KI Einheiten
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub KinderleichtBauen()
        TrimGebäude()
        Gebäude = SortGebäude(Gebäude, GebäudeSortierKriterien.Zufall)

        If Spieler.Bauprioritäten IsNot Nothing Then
            KIGenerellerSuperBau.Bauen(Gebäude, Spieler.Bauprioritäten)
        Else
            'So jetzt geht es ans bauen.
            Dim Infanteristen As Integer = CountInfanteristen()
            'Man o man sind wir schnell
            Dim ErsterDurchgang As Boolean = True
            If Spieler.VeränderteWerte.KeinBau = False Then
                For I2 = 0 To Gebäude.Length - 1
                    If Gebäude(I2).GetBauliste(Spieler.Spieler).Length > 0 Then
                        If Gebäude(I2).Angriff = ObjektGebäude.Angriffe.Keiner Then
                            If IsFeldLeer(Gebäude(I2).Rechteck.X, Gebäude(I2).Rechteck.Y) = True Then
                                'So hier haben wir ein Gebäude mit dem Mann Einheiten bauen kann
                                If Spieler.Fonds > 30000 And Objektverwalter.Spielfeld.Runde > 1 Then
                                    KinderleichtBauen(Gebäude(I2), False, Infanteristen)
                                Else
                                    If Einheiten.Length < 20 Then
                                        If AnzahldesBauens > 4 Then
                                            If Objektverwalter.Spielfeld.Runde > 1 Then
                                                If Infanteristen < 5 Then
                                                    If Spieler.Fonds < 20000 Then
                                                        KinderleichtBauen(Gebäude(I2), False, Infanteristen)
                                                    Else
                                                        KinderleichtBauen(Gebäude(I2), True, Infanteristen)
                                                    End If
                                                Else
                                                    KinderleichtBauen(Gebäude(I2), False, Infanteristen)
                                                End If
                                            Else
                                                If Infanteristen < 5 Then
                                                    KinderleichtBauen(Gebäude(I2), True, Infanteristen)
                                                Else
                                                    KinderleichtBauen(Gebäude(I2), False, Infanteristen)
                                                End If
                                            End If
                                        ElseIf AnzahldesBauens > 2 Then
                                            If Objektverwalter.Spielfeld.Runde > 1 Then
                                                If Infanteristen < 5 Then
                                                    If Spieler.Fonds < 20000 Then
                                                        KinderleichtBauen(Gebäude(I2), False, Infanteristen)
                                                    Else
                                                        KinderleichtBauen(Gebäude(I2), True, Infanteristen)
                                                    End If
                                                ElseIf Gebäude(I2).GebäudeID = "BASIS" Or Gebäude(I2).GebäudeID = "FLUGHAFEN" Then
                                                    KinderleichtBauen(Gebäude(I2), False, Infanteristen)
                                                End If
                                            Else
                                                If Infanteristen < 5 Then
                                                    KinderleichtBauen(Gebäude(I2), True, Infanteristen)
                                                Else
                                                    KinderleichtBauen(Gebäude(I2), False, Infanteristen)
                                                End If
                                            End If
                                        Else
                                            If Infanteristen < 5 Then
                                                KinderleichtBauen(Gebäude(I2), True, Infanteristen)
                                            ElseIf Gebäude(I2).GebäudeID = "BASIS" Then
                                                KinderleichtBauen(Gebäude(I2), False, Infanteristen)
                                            End If
                                        End If
                                    Else
                                        If Infanteristen < 5 Then
                                            KinderleichtBauen(Gebäude(I2), True, Infanteristen)
                                        Else
                                            KinderleichtBauen(Gebäude(I2), False, Infanteristen)
                                        End If
                                    End If
                                End If
                            End If
                        End If
                    End If
                    If ErsterDurchgang = True Then
                        If I2 = Gebäude.Length - 1 Then
                            If Spieler.Fonds > 15000 Then
                                AnzahldesBauens = 5
                                I2 = 0
                                ErsterDurchgang = False
                            Else
                                ErsterDurchgang = False
                                I2 = 0
                            End If
                        End If
                    End If
                Next
            End If
        End If
        AnzahldesBauens = 0
        If Schlachtfeld = ObjektSpielfeld.Bodenschlacht And Objektverwalter.Spielfeld.Regeln.Luftschlacht = True Then

            Schlachtwechsel(EinheitenSortierKriterien.Zufall)
            KIModusIntern = KIModiIntern.StartWarten
        Else
            'Wir beenden.
            KIModusIntern = KIModiIntern.RundenEnde
        End If
    End Sub
    ''' <summary>
    ''' So baut ein Gebäude eine Einheit im einfachen Modus
    ''' </summary>
    ''' <param name="InfanterieBau"></param>
    ''' <param name="InfanterieZahl"></param>
    ''' <remarks></remarks>
    Private Sub KinderleichtBauen(ByVal Besetzung As ObjektGebäude, ByVal InfanterieBau As Boolean, ByVal InfanterieZahl As Integer)
        Dim BauEinheiten() As Integer = GetAllBuildUnits(Besetzung.GetBauliste(Besetzung.Spieler), Besetzung.Rechteck.X, Besetzung.Rechteck.Y)
        Dim MomentanzuBauendeEinheit As Integer = -1
        If BauEinheiten.Length > 0 Then
            If InfanterieBau = True Then
                'So sucht sich die einfache KI aus ob welche Infanteristen sie baut
                Dim Infanteristen() As Integer = {}
                For I = 0 To BauEinheiten.Length - 1
                    If Objektverwalter.KannEinheitBesetzen(Besetzung.GetBauliste(Besetzung.Spieler)(BauEinheiten(I))) = True Then
                        Array.Resize(Infanteristen, Infanteristen.Length + 1)
                        Infanteristen(Infanteristen.Length - 1) = BauEinheiten(I)
                    End If
                Next
                If Infanteristen.Length > 0 Then
                    If Zufallszahl(1, 100) < 70 Then
                        Dim BilligsteTruppe As ObjektEinheit = Nothing
                        For I2 = 0 To Infanteristen.Length - 1
                            Dim E As ObjektEinheit = ObjektLadeklasse.NewEinheit(Besetzung.GetBauliste(Spieler.Spieler)(Infanteristen(I2)), Spieler.Spieler, Besetzung.Rechteck.X, Besetzung.Rechteck.Y)
                            If BilligsteTruppe Is Nothing Then
                                BilligsteTruppe = E
                            ElseIf E.Kosten < BilligsteTruppe.Kosten Then
                                BilligsteTruppe = E
                            ElseIf E.Kosten = BilligsteTruppe.Kosten And Zufallszahl(0, 2) = 0 Then
                                BilligsteTruppe = E
                            End If
                        Next
                        'Dann mal los ihr Infis
                        GebäudeAuswählen(KIModiExtern.EinheitBauen, Besetzung, BilligsteTruppe)
                    Else
                        For I = 0 To Infanteristen.Length - 1
                            If MomentanzuBauendeEinheit >= 0 Then
                                Dim Kosten As Integer = ObjektLadeklasse.GetEinheitenkosten(Besetzung.GetBauliste(Besetzung.Spieler)(Infanteristen(I)))
                                If Kosten > 1000 Then
                                    If Objektverwalter.Spielfeld.Runde > 1 Then
                                        If ObjektLadeklasse.GetEinheitenkosten(Besetzung.GetBauliste(Besetzung.Spieler)(MomentanzuBauendeEinheit)) = Kosten And Zufallszahl(0, 1) = 1 Then
                                            Dim FehlendeInfis As Integer = 5 - InfanterieZahl
                                            If Spieler.Fonds / Kosten >= FehlendeInfis Then
                                                MomentanzuBauendeEinheit = Infanteristen(I)
                                            End If
                                        ElseIf ObjektLadeklasse.GetEinheitenkosten(Besetzung.GetBauliste(Besetzung.Spieler)(MomentanzuBauendeEinheit)) < Kosten Then
                                            Dim FehlendeInfis As Integer = 5 - InfanterieZahl
                                            If Spieler.Fonds / Kosten >= FehlendeInfis Then
                                                MomentanzuBauendeEinheit = Infanteristen(I)
                                            End If
                                        End If
                                    End If
                                ElseIf Zufallszahl(0, 7) > 3 Then
                                    MomentanzuBauendeEinheit = Infanteristen(I)
                                End If
                            Else
                                MomentanzuBauendeEinheit = Infanteristen(I)
                            End If
                        Next
                    End If
                    If MomentanzuBauendeEinheit >= 0 Then
                        GebäudeAuswählen(KIModiExtern.EinheitBauen, Besetzung, ObjektLadeklasse.NewEinheit(Besetzung.GetBauliste(Besetzung.Spieler)(MomentanzuBauendeEinheit), Spieler.Spieler, -1, -1), 4)
                    End If
                End If
            Else
                'Die KI sucht sich alle Einheiten raus die sie Bauen und benutzen kann und baut dann eine Einheit
                Dim neueBauEinheiten() As Integer = {}
                For I = 0 To BauEinheiten.Length - 1
                    If Objektverwalter.HatEinheitWaffen(Besetzung.GetBauliste(Besetzung.Spieler)(BauEinheiten(I))) = True Then
                        If Einheiten.Length > 20 Then
                            Array.Resize(neueBauEinheiten, neueBauEinheiten.Length + 1)
                            neueBauEinheiten(neueBauEinheiten.Length - 1) = BauEinheiten(I)
                        ElseIf ObjektLadeklasse.GetEinheitenkosten(Besetzung.GetBauliste(Besetzung.Spieler)(BauEinheiten(I))) <= GeldKosten Then
                            Array.Resize(neueBauEinheiten, neueBauEinheiten.Length + 1)
                            neueBauEinheiten(neueBauEinheiten.Length - 1) = BauEinheiten(I)
                        ElseIf Spieler.Fonds > 25000 Then
                            Array.Resize(neueBauEinheiten, neueBauEinheiten.Length + 1)
                            neueBauEinheiten(neueBauEinheiten.Length - 1) = BauEinheiten(I)
                        End If
                    End If
                Next
                ReDim BauEinheiten(-1)
                If neueBauEinheiten.Length > 0 Then
                    'So diese Einheit kann Angreifen und ziehen und ist unter dem Kostenlimit
                    For I = 0 To neueBauEinheiten.Length - 1
                        If Spieler.Fonds / ObjektLadeklasse.GetEinheitenkosten(Besetzung.GetBauliste(Besetzung.Spieler)(neueBauEinheiten(I))) > 2 Then
                            Array.Resize(BauEinheiten, BauEinheiten.Length + 1)
                            BauEinheiten(BauEinheiten.Length - 1) = neueBauEinheiten(I)
                        ElseIf Einheiten.Length > 20 And Zufallszahl(0, 2) = 2 Then
                            Array.Resize(BauEinheiten, BauEinheiten.Length + 1)
                            BauEinheiten(BauEinheiten.Length - 1) = neueBauEinheiten(I)
                        ElseIf Zufallszahl(0, 6) = 5 Then
                            Array.Resize(BauEinheiten, BauEinheiten.Length + 1)
                            BauEinheiten(BauEinheiten.Length - 1) = neueBauEinheiten(I)
                        End If
                    Next
                End If
                If BauEinheiten.Length > 0 Then
                    Dim Einheit As Integer = BauEinheiten(Zufallszahl(0, BauEinheiten.Length - 1))
                    GebäudeAuswählen(KIModiExtern.EinheitBauen, Besetzung, ObjektLadeklasse.NewEinheit(Besetzung.GetBauliste(Besetzung.Spieler)(Einheit), Spieler.Spieler, -1, -1), 4)
                End If
            End If
        End If
    End Sub
    ''' <summary>
    ''' Mit dieser Funktion beenden die einfachen KI's die Runde
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub KinderleichtRundenEnde()
        If Spieler.KOS(0).Gabemodus = ObjektKO.Gabemodi.Keine Then
            Dim GabefüllstandKO1 As Integer = Spieler.KOS(0).Gabeleiste
            Dim GabefüllstandKO2 As Integer = -1
            If IsNothing(Spieler.KOS(1)) = False Then
                GabefüllstandKO2 = Spieler.KOS(1).Gabeleiste
            End If
            If GabefüllstandKO2 >= 0 Then
                Dim MaximaleSternDifferenz As Integer = ((Spieler.KOS(0).SpezialgabeKosten + Spieler.KOS(0).Gabekosten) * Spieler.KOS(0).Sternkosten - GabefüllstandKO1) - ((Spieler.KOS(1).SpezialgabeKosten + Spieler.KOS(1).Gabekosten) * Spieler.KOS(1).Sternkosten - GabefüllstandKO2)
                If MaximaleSternDifferenz < -1000 Then
                    RundenEndeMitWechsel = True
                    Spieler.Wechsel()
                End If
            End If
        ElseIf Spieler.KOS(0).Gabemodus = ObjektKO.Gabemodi.Doppelgabe Then
            If Spieler.KOS(1).Gabemodus = ObjektKO.Gabemodi.Keine Then
                RundenEndeMitWechsel = True
                Spieler.Wechsel()
            End If
        End If
        Schleife = True
    End Sub

    Protected Overrides Function CalculateRealZiel(ByRef WSS As Wegsuchsystem, ByVal Ziel As System.Drawing.Point, ByVal Einheit As ObjektEinheit, ByRef Opfer As System.Drawing.Point) As System.Drawing.Point
        Return Ziel
    End Function
End Class
